#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N=2*1e4+10;



vector<pair<int,int>> edge[N];
int n,m;
int flg[N];
bool dfs(int cur,int c,int mid)
{
	flg[cur]=c;
	for(auto&e:edge[cur])
	{
		if(e.second<=mid)
			continue;
		if(flg[e.first])
		{
			if(flg[e.first]==c)
				return false;
		}
		else if(!flg[e.first]){
			if(!dfs(e.first,3-c,mid))
				return false;
		}
	}
	return true;
}
bool check(int mid)
{
	memset(flg,0,sizeof(flg));
	for(int i=1;i<=n;i++)
	{
		if(!flg[i])
		{
			if(!dfs(i,1,mid))
			{
				return false;
			}
		}
	}
	return true;
}
int main()
{
	cin>>n>>m;
	
	for(int i=0;i<m;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		edge[a].push_back({b,c});
		edge[b].push_back({a,c});
	}
	
	int left=0,right=1e9;
	while(left<right)
	{
		int mid=left+right>>1;
		if(check(mid))
		{
			right=mid;
		}
		else{
			left=mid+1;
		}
	}
	cout<<right;
	return 0;
}
